home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / SAS-C / sc655pch / Read.Me < prev    next >
Encoding:
Text File  |  1995-02-27  |  21.0 KB  |  638 lines

  1.  Copyright (c) 1992-1995 SAS Institute, Inc, Cary, NC
  2.  All Rights Reserved.
  3.  
  4.  This document describes bug fixes and enhancements made in the 6.55
  5.  release of the SAS/C Development System for AmigaDOS.    To install
  6.  the 6.55 patch, you must have version 6.50 or 6.51 of the SAS/C
  7.  Development system installed.
  8.  
  9.  Note that not all executables and shared libraries have been
  10.  modified. Those that have not been modified keep their old version
  11.  number (6.50 or 6.51).  This is normal.
  12.  
  13.  Since technical support has been terminated for the Amiga C product,
  14.  the technical support avenues listed in your User's Guide are no
  15.  longer valid.    If you need help, post to the Internet newsgroup
  16.  comp.sys.amiga.programmer.  Knowledgeable SAS/C developers read
  17.  that group and may be able to help you.
  18.  
  19.  Since the size of this archive is too big to fit on a standard floppy,
  20.  a small script has been included for those who wish to copy this
  21.  patch to floppies. To run this script, type:
  22.  
  23.     execute Create_Install_floppies
  24.  
  25.  
  26.  ***************************** New Features ************************
  27.  
  28. New development on the SAS/C system for AmigaDOS was terminated last
  29. summer, but between the release of Version 6.50 and the termination
  30. of development we did make some improvements to the system.  We have
  31. included these improvements in the 6.55 patch.
  32.  
  33. 1. SE will now optionally display a C file in multiple colors for the
  34.    different token types. You can select the foreground, background,
  35.    and style (bold, italic, underline or normal) for each of the
  36.    following nine catagories: Plain Text, C Comments, C++ Comments,
  37.    Double quoted strings, Single quoted strings, Numerical constants,
  38.    Keywords, Identifiers, and Preprocessor Statements.    There are two
  39.    new menu items to control this in the Configuration Window.
  40.  
  41.       Colorize C Files    -  when set will cause all new files opened that
  42.      end in .c* or .h to be colorized. Changing this will not effect
  43.      any windows currently open in SE.
  44.  
  45.       Colorize C Prefs    - will bring up another window and allow you to
  46.      change the display attributes for any of the nine catagories.
  47.  
  48.    There is also a new key command that will toggle the colorization
  49.    status of the current window.  Its abbreviation is CC. You can
  50.    bind it to any key that you like (enter CTRL-M, hit the key
  51.    combination, and type "CC" in the box just above the tab settings).
  52.  
  53. 2. A new profiler has been added that works like the SPROF profiler, but
  54.    provides a graphical user interface to the profiling process.  Its name
  55.    is GUIPROF; full source code and instructions are provided in the
  56.    SC:EXTRAS/GUIPROF directory.  The GUIPROF executable is available in
  57.    the SC:C directory.
  58.  
  59. 3. Example code is provided in SC:EXAMPLES/AMIPROC that forks a subprocess
  60.    with its own near data section.  This will allow you to share code
  61.    between processes but still use external data in each subprocess.
  62.  
  63. 4. Example code is provided in SC:EXAMPLES/MOUNT that mounts and
  64.    dismounts a file system node on the system list WITHOUT using the
  65.    AmigaDOS Mount command.  This will allow you to code a file system
  66.    as a regular C program, invokable from command line or workbench.
  67.    Since it's a regular process, it will be able to use printf() or
  68.    other library I/O and be easily debuggable with CPR in any usual
  69.    fashion.
  70.  
  71. 5.  Three new messages have been added to the C compiler: 188, 189,
  72.     and 113.
  73.  
  74.     188 is produced if you attempt to define functions or data in a
  75.     header file while you are building a GST.
  76.  
  77.     189 is produced if the GST you are using was built with different
  78.     options than the current option set.  189 is produced sometimes as
  79.     a warning and sometimes as an error; it is turned OFF by default.
  80.     If, for example, you use MATH=68881 and the GST was built with
  81.     MATH=STANDARD, you will get no message.  Enable the warning with
  82.     the STRICT or WARN=189 options to get a message for this case.
  83.  
  84.     113 is produced if you use the "->" or "." operators incorrectly.
  85.     It is similar to message 12, "invalid structure reference", except
  86.     it gives more information about the operator involved and the type
  87.     you tried to use the operator with.
  88.  
  89.     More information on these messages is available in the file
  90.     sc:help/scmsg.guide .
  91.  
  92. 6.  Built-in preprocessor symbols (like _SHORTINT, _UNSCHAR, etc.)
  93.     were not added to the GST in previous versions.  In 6.55, they
  94.     are added.    This is how the compiler detects option conflicts
  95.     as described above.  If you depend on these built-in symbols
  96.     for the various MATH= options, make sure you enable warning
  97.     189 so you don't end up with multiple definitions.  For example,
  98.     _M68881 and _IEEE could both end up defined for your code if
  99.     you created a GST with MATH=68881 and used MATH=IEEE on your
  100.     command line.
  101.  
  102. 6. The built-in memcpy function can copy certain structures more
  103.    efficiently now since the compiler retains more information on
  104.    the alignment requirements of the structures.  This also
  105.    benefits structure assignment and call-by-value.
  106.  
  107.  ***************************** IMPORTANT ***************************
  108.  
  109. 0. For users who never applied the 6.51 patch:
  110.    The layout of bitfields was inadvertently changed between 6.0 and
  111.    6.50, which meant that structures containing bitfields were
  112.    incompatible between the two versions.  Bitfields now use
  113.    the 6.0 method, with the exception of bitfields of size :0.
  114.    :0 bitfields exhibited a bug in 6.0-6.3 and added extra unusable
  115.    bytes to the structure.  6.55 bitfields do not add these extra
  116.    bytes.  Note that the bitfields in 6.51 and 6.55 are identical;
  117.    this change only affects users upgrading from 6.50.
  118.  
  119. 1. The __stack external variable sets the minimum stack size for
  120.    your program, as documented in the Library Reference Manual and
  121.    elsewhere.  However, if you use it, you must set __stack to an
  122.    even multiple of 4 bytes or risk having your machine crash.
  123.  
  124. 2. Many users have inquired about the Quick Reference Guide for
  125.    6.50.  There is no new Quick Reference Guide in 6.50; the 6.0
  126.    guide is shipped to all new 6.50 customers, and customers who
  127.    are upgrading should continue to use their old Quick Reference
  128.    Guide.
  129.  
  130. 3. Many users have asked about disk 6 in the installation process.
  131.    Disk 6 is used only if you do the floppy installation; hard disk
  132.    users do not need this disk.
  133.  
  134. 4. The compiler now defines a preprocessor symbol __AMIGADATE__.
  135.    This preprocessor symbol resolves to a datestamp string in the
  136.    format required for the AmigaDOS VERSION command.  The format is
  137.    "(dd.mm.yy)", where dd is the day (1-31), mm is the month (1-12),
  138.    and yy is the year. __AMIGADATE__ is available from both C
  139.    and C++.  Version 6.51 had some bugs in the __AMIGADATE__
  140.    processing which have been fixed for this patch release.
  141.  
  142. 5. The macros for some functions defined in the C header files are
  143.    now not defined if compiling C++.  They conflicted with the names
  144.    of some member items of C++ classes in <iostream.h> or
  145.    <complex.h>. Problem functions are <string.h>/index(),
  146.    <math.h>/min(), max(), <fcntl.h>/open(), read(), write(),
  147.    close(), <stdlib.h>/abs().  Many of these have alternate names
  148.    using preceding underscores that can be used instead.
  149.  
  150. 6. The priority of the autoinit functions for utility.library and
  151.    the various Commodore math libraries were changed from 250
  152.    to 100 in versions 6.51 and 6.55.  This allows the autoinitializer
  153.    for the SPROF and GUIPROF profilers to use utility.library if it
  154.    is compiled with UTILLIB.
  155.  
  156. 7. Several users have reported a problem using fopen() to open
  157.    a "CON:" window. With the default AmigaShell, two windows will
  158.    be opened. It was not possible to fix this problem in the library,
  159.    because fopen() needs to do a Lock() to determine if the file exists
  160.    prior to doing the Open(). However, Lock() will not be called if "r+"
  161.    mode is used, and only one window will open. For example, the following
  162.    will only open one window:
  163.  
  164.      fp = fopen("CON:", "r+");
  165.  
  166. 8. The source file _tzset.c has been added to the sc:source directory.
  167.    When compiled with no #defines, it will behave like the default
  168.    __tzset function in the libraries. If compiled with LESS_GETENV=1,
  169.    the getenv("TZ") will only be called once. This can be beneficial
  170.    for programs that call time() frequently, ie BBS programs. Be sure to
  171.    compile this file with the PARM=BOTH option.
  172.  
  173. 9. If you have problems running CPR from the workbench, check to see if
  174.    you are using a MagicWB icon for the 'Debug' icon.  If so, you need to
  175.    remove the '»»»» Icon by Martin Huttenloher ««««' ToolType from the
  176.    icon.  Use the Workbench "Icons/Information" menu option to remove this
  177.    ToolType.  CPR cannot work correctly with this ToolType in the icon.
  178.  
  179. 10. The C++ translator has some problems dealing with error situations
  180.     that arise after parse errors.  This can sometimes result in 
  181.     many enforcer hits.  We have found and fixed many of these problems, 
  182.     in many cases thanks to your error reports, but some problems no 
  183.     doubt remain.  The root cause is a fundamental difference in the 
  184.     way the Amiga operating system or Enforcer handles illegal memory 
  185.     accesses from the way the C++ translator's original target 
  186.     platform handles it.
  187.     
  188.     If you get a string of enforcer hits from C++, there will almost 
  189.     always be at least one error message generated.  Fix the first 
  190.     reported error and you will likely remove the Enforcer hits.
  191.  
  192. ===============================
  193. Documentation/Help File Changes
  194. ===============================
  195.  
  196. The Library Reference manual states for the forkl() routine that
  197. if the std_in field of the FORKENV structure is NULL, the current
  198. stdin will be used. This has been changed for 6.55 to an
  199. Open("*",...), so that a single program can call forkl several
  200. times.
  201.  
  202. C++ error 1597 was not documented.  It is now documented in the file
  203. sc:help/scmsg.guide.
  204.  
  205. The Library Reference manual incorrectly showed the strstream
  206. constructor as having a default value of ios::out for the third
  207. formal parameter mode. Please cross out the "= ios::out" in the
  208. strstream constructor prototype described on page 684 of the Library
  209. Reference manual. This occurs in two places on page 684, once under
  210. the Synopsis section and once under the Constructors section.  This
  211. has been corrected in the online sc_lib.guide file.
  212.  
  213. The Library Reference manual descriptions of mkstemp() and mktemp()
  214. need to be changed on pages 349 and 351, respectively, to reflect
  215. the changes made in the header files. In both cases, the formal
  216. parameter, template should be be changed to template_arg.  This has
  217. been corrected in the online sc_lib.guide file.
  218.  
  219. ===============================
  220. List of Modified Files
  221. ===============================
  222.  
  223. The following files were modified during the 6.55 patch installation.
  224.  
  225. These files should be version 6.55.
  226.  
  227. sc/c/sc
  228. sc/c/scopts
  229. sc/c/sc5
  230. sc/c/cpr
  231. sc/c/cprx
  232. sc/c/cprk
  233. sc/libs/sc1.library
  234. sc/libs/sc2.library
  235. sc/libs/scgo.library
  236. sc/libs/scgst.library
  237. sc/libs/scpeep.library
  238. sc/libs/schi.library
  239. sc/libs/sccxx.library
  240. sc/c/slink
  241. sc/c/asm
  242. sc/c/omd
  243. sc/c/oml
  244. sc/c/scmsg
  245. sc/c/se
  246. sc/c/smake
  247. sc/c/scsetup
  248. sc/c/splat
  249. sc/c/grep
  250. sc/c/mkmk
  251. sc/c/tb
  252. sc/c/scompact
  253. sc/libs/sekeymap.library
  254. sc/extras/mkmk/gensmake.c
  255. sc/extras/mkmk/mkmk.c
  256. sc/source/c.a
  257. sc/source/cback.a
  258. sc/source/libinit.c
  259. sc/source/ovs.a
  260. sc/source/constructor.h
  261. sc/include/stdlib.h
  262. sc/include/constructor.h
  263. sc/include/fcntl.h
  264. sc/include/mffp.h
  265. sc/include/stdio.h
  266. sc/include/dos.h
  267. sc/include/ios1.h
  268. sc/include/datatypes/datatypesclass.i
  269. sc/include/datatypes/datatypesclass.h
  270. sc/include/exec/exec_lib.i
  271. sc/include/sys/commhuge.h
  272. sc/include/sys/dir.h
  273. sc/include/workbench/workbench.i
  274. sc/include/workbench/workbench.h
  275.  
  276. These files were not changed for version 6.55 but were changed in 6.51,
  277. and will have a version of 6.51.
  278.  
  279. sc/c/mcc
  280. sc/c/mln
  281. sc/c/cctosc
  282. sc/c/lntoslink
  283. sc/source/_fpinit.c
  284. sc/source/_main.c
  285. sc/source/autoopenfail.c
  286. sc/source/_iob.c
  287. sc/include/assert.h
  288. sc/include/math.h
  289. sc/include/string.h
  290. sc/include/unistd.h
  291. sc/include/functions.h
  292. sc/include/cxxinclude/iostream.h
  293. sc/include/sys/commwben.h
  294.  
  295. The remaining files will still have a version number of 6.50.
  296.  
  297.  
  298. ===============================
  299. Bug Fixes
  300. ===============================
  301.  
  302. This is a partial list of bugs fixed in version 6.55.  All repeatable code
  303. generation bugs, enforcer hits, and CXERRs have been fixed, with the
  304. exception of a couple in the sccxx.library that occur when it is given
  305. badly mangled input.  These bug fixes are not listed individually here.
  306.  
  307. Since the list of bugs is not complete, please try any cases that failed
  308. before.  Your favorite bug may have been fixed anyway.
  309.  
  310. -------------------------------------------------------------------------
  311.  
  312. Yes, the __AMIGADATE__ macro is finally fixed.    __AMIGADATE__ had two
  313. problems in 6.51 (both related to the same cause).  First, the symbol
  314. had an extra '\0' at the end, so it didn't work in string concatenations;
  315. Second, the symbol trashed its own final double quote if the number
  316. for the current month was 10-12 and the day was 10-31.
  317.  
  318. ---
  319.  
  320. A very long-standing bug in GSTs was found and squashed.  If you created
  321. a GST, then modified a header file, then deleted the .gst file from the
  322. disk but didn't flush the GST from memory, then attempted to rebuild the
  323. GST, the old GST remained in memory.  No new GST was created.  This has
  324. now been fixed.
  325.  
  326. ---
  327.  
  328. The compiler was failing to produce an error or warning if the user
  329. attempted to define __inline functions in a header file while building
  330. a GST.    Error 188 was added.
  331.  
  332. ---
  333.  
  334. The compiler was failing to produce an error or warning if the user built
  335. a GST with one set of options, then built a C file using that GST but with
  336. a different set of options.  Warning/Error 189 was added.  This message
  337. reports conflicts between the MATH=, SHORTINT, and UNSCHAR options.
  338.  
  339. ---
  340.  
  341. The __FUNC__ built-in preprocessor symbol was being expanded to "" if
  342. PPONLY was used.  It is now not expanded with PPONLY.
  343.  
  344. ---
  345.  
  346. The compiler did not produce warning 105, "no external symbols defined",
  347. if it encountered a prototype for an external function.  It now does so.
  348.  
  349. ---
  350.  
  351. The compiler now suppresses warning 105 if the NOOBJNAME option is
  352. specified.  This allows you to build a GST with NOOBJNAME and not get
  353. the warning.
  354.  
  355. ---
  356.  
  357. CPR left a lock on the current directory at exit.
  358.  
  359. ---
  360.  
  361. The compiler now ignores 0x0D characters at the end of a line,
  362. as long as they are not in a string constant.  This allows you to port
  363. code for the IBM PC to the Amiga without stripping the CR-LF pair from
  364. the end of each line.
  365.  
  366. ---
  367.  
  368. SPROF hung the machine if you tried to run two programs compiled with
  369. PROFILE at the same time.
  370.  
  371. ---
  372.  
  373. The stat() family of functions did not do the correct time zone
  374. conversion.  They now do.
  375.  
  376. ---
  377.  
  378. The autoinitializer for coverage analysis had the incorrect priority with
  379. earlier versions.  The priority is now 210, which should allow you to
  380. cover your C++ constructurs and any C autoinitializers with default
  381. priority.
  382.  
  383. ---
  384.  
  385. An error message was added to detect the case of passing a pointer to a
  386. regargs function as a parameter to a function expecting a pointer to a
  387. stdargs function.
  388.  
  389. ---
  390.  
  391. The library function dfind() had a bug in which a dfind on the current
  392. directory would unlock CurDir().
  393.  
  394. ---
  395.  
  396. The prototype for opendir() in include:sys/dir.h was missing a 'const'
  397. keyword.
  398.  
  399. ---
  400.  
  401. Could not set __stdiowin if compiling with MATH=8 and DATA=FAR.  The linker
  402. would give "Near reference to item not in near data section" errors.
  403.  
  404. ---
  405.  
  406. In fcntl.h, the #defines for open, close, read, and write were surrounded
  407. with #ifndef __cplusplus statements.  This prevented a clash with the
  408. C++ iostreams library, which defines member functions of the same name.
  409. If you need to use the UNIX level 1 I/O functions from C++, use the
  410. double-underscore versions (__open, __close, __read, __write).
  411.  
  412. ---
  413.  
  414. tmpfile() would not allow more than 99 accesses during a single program
  415. run, whether you closed any previously opened files or not.  It's supposed
  416. to allow 99 open files at one time.
  417.  
  418. ---
  419.  
  420. The SC driver had a limit of 32 command-line options.  This limit has been
  421. removed.  SC now accepts any number of command-line arguments.
  422.  
  423. ---
  424.  
  425. CPR had a limit of 1k on the path.
  426.  
  427. ---
  428.  
  429. The cross-debugger sometimes crashed when using pipes.
  430.  
  431. ---
  432.  
  433. CPR couldn't display far globals if they were merged into the near section
  434. by the linker.    This was actually a linker bug, and has been fixed.
  435.  
  436. ---
  437.  
  438. ASM didn't warn for the invalid statement "add.b d5,a0", but instead
  439. generated incorrect code.
  440.  
  441. ---
  442.  
  443. CPR sometimes skipped the first statement in main() when first coming up.
  444. This happened if the main() had no prolog, so it only occurs for simple
  445. functions compiled with NOSTACKCHECK.
  446.  
  447. ---
  448.  
  449. ASM only put the base name of the file into the HUNK_NAME header.  This
  450. could cause confusion when SLINK tries to produce an error message, since
  451. SLINK assumes ".c" for the extension.
  452.  
  453. ---
  454.  
  455. stat() could leave a lock on a file if CTRL-C is hit.
  456.  
  457. ---
  458.  
  459. forkl() attempted to pass pr_COS to multiple CreateNewProc()s, which
  460. apparently fails even if you tell CreateNewProc() not to close them.
  461. Fixed by passing Open("*", ...) for std_in.
  462.  
  463. ---
  464.  
  465. %p didn't work correctly in __builtin_printf with SHORTINT.
  466.  
  467. ---
  468.  
  469. If a C++ file with a static class member was compiled from SE via the F4
  470. key, and the LINK option was set, and that static member was never defined
  471. in the source, SE would not report the link error to the user.    It would
  472. instead create an executable file that crashes when run.
  473.  
  474. ---
  475.  
  476. The compiler issued an incorrect error message for pointer addition
  477. performed on a void **.  Example:   void **x;  x = x + 1;
  478.  
  479. ---
  480.  
  481. Strange character appeared in SE if you set tab expansion on, then typed
  482. {
  483. }
  484. }
  485.  
  486. ---
  487.  
  488. The value of HUGE_VAL was incorrect.  It has been fixed.
  489.  
  490. ---
  491.  
  492. The %n argument to scanf didn't consider white space (tabs and spaces).
  493.  
  494. ---
  495.  
  496. When scopts' window was on a public screen, the amigaguide help window
  497. was opened on the WorkBench screen instead of the public screen.
  498.  
  499. ---
  500.  
  501. CPR didn't pass local ENV variables to the program being debugged.
  502. CPR now uses CreateNewProc() with AmigaDOS V2.0 and above.
  503.  
  504. ---
  505.  
  506. Warning 74, "Initializer data truncated", was produced incorrectly when
  507. the only thing truncated was the trailing null byte.
  508.  
  509. ---
  510.  
  511. The compiler could produce garbled error messages if a C file with invalid
  512. syntax that used a GST was compiled.
  513.  
  514. ---
  515.  
  516. ASM didn't accept '|' for the bitwise OR operation, as do many other
  517. assemblers.  It now does.
  518.  
  519. ---
  520.  
  521. The compiler couldn't print the value of a "static const double" if the
  522. STRINGMERGE option was used.
  523.  
  524. ---
  525.  
  526. An empty macro caused ASM to give a "not enough memory" error.
  527.  
  528. ---
  529.  
  530. The OPTALIAS option was not working correctly.
  531.  
  532. ---
  533.  
  534. The "Undefined function called" requester was never produced for programs
  535. linked with SLINK in BATCH mode.  The program just returned.
  536.  
  537. ---
  538.  
  539. The UNASSEMBLE command in CPR did not work, and did not return control to
  540. the user.
  541.  
  542. ---
  543.  
  544. SMFIND did not use full pathnames for files when executed from the Shell.
  545.  
  546. ---
  547.  
  548. When compiling with PROFILE, _PROLOG() and _EPILOG() calls were added to
  549. __interrupt functions.    This is no longer done, since interrupt functions
  550. have no business calling the profiler anyway.
  551.  
  552. ---
  553.  
  554. strtod() failed if the first character of the string to be converted was
  555. a null byte.
  556.  
  557. ---
  558.  
  559. In the include file INCLUDE:mffp.h, the definition of the "ceil" macro
  560. has been changed from SPFCeil(f) to SPCeil(f).
  561.  
  562. ---
  563.  
  564. ALT-H to open an interlace screen in SE only opened an NTSC screen.  It
  565. now opens NTSC or PAL as appropriate.
  566.  
  567. ---
  568.  
  569. ASM now accepts some 68040 and 68030 instructions that it previously did
  570. not accept.
  571.  
  572. ---
  573.  
  574. If SCOPTS failed in its first attempt to open its window, it scanned the
  575. system fonts list twice (not just once) looking for a replacement font.
  576. This was very slow on some machines.
  577.  
  578. ---
  579.  
  580. SCSETUP did not preserve the protection bits on files copied from
  581. SC:STARTER_PROJECT.
  582.  
  583. ---
  584.  
  585. The SET command in CPR was broken for floats.
  586.  
  587. ---
  588.  
  589. The MKMK utility crashed if run under OS 1.3 or earlier.  It now issues an
  590. error message and quits.
  591.  
  592. ---
  593.  
  594. rawcon() now sends a message to the console task from the input file
  595. handler instead of the console task from the process structure.
  596. This allows it to work when input has been redirected to a console.
  597.  
  598. ---
  599.  
  600. The PRELINK option of SLINK could not be used with files containing calls
  601. to C++ constructors/destructors or C autoinit/autoterm functions.  You
  602. would get multiply defined symbol errors from SLINK from ___ctors and
  603. ___dtors.
  604.  
  605. ---
  606.  
  607. printf() didn't handle "field.precision" properly for calls like
  608. printf("%5.d", 0);
  609.  
  610. ---
  611.  
  612. If ASM was invoked from SC, and CPU=68020 or CPU=68030 was specified, ASM
  613. was invoked with "-m2 -m3" instead of just one or the other.
  614.  
  615. ---
  616.  
  617. ASM gave a spurious warning "extraneous data on input line" if a comment
  618. followed the final END statement.
  619.  
  620. ---
  621.  
  622. ASM failed to add a trailing '/' to -i paths like the C compiler does.
  623.  
  624. ---
  625.  
  626. MKMK was putting the date and time it was compiled into the output
  627. smakefiles, rather than the date and time the smakefile was created.
  628. (Well, it worked when I tested it... right after compiling it.)
  629.  
  630. ---
  631.  
  632. The qsort() function could take up lots of stack in 6.51 and previous
  633. versions.  The 6.55 version will always recurse on the smaller half of
  634. the list, therefore it does not take up nearly as much stack.
  635.  
  636. ---
  637.  
  638.